package com.basker.pisces.service.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 服务消费注解。
 *
 * <p>
 * 这个注解是一个hint，只是标记作用
 *
 * @author hangwen
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface ServiceConsume {

    /**
     * 服务的隔离策略,配置为{@link IsolationStrategy#DEFAULT}的话，会获取default属性的值，<b>特别的，信号量隔离时，超时机制是没有效果的</b>
     *
     * @return
     */
    IsolationStrategy IsolationStrategy() default IsolationStrategy.DEFAULT;

    /**
     * 信号量隔离时，设置其最大访问数，配置为0或负数时，会取default属性的值;
     *
     * @return
     */
    int semaphoreMaxConcurrentRequests() default -1;

    /**
     * 服务超时，单位：ms,配置为0或负数时，会获取default属性的值;
     *
     * @return
     */
    int timeoutMills() default -1;

    public static enum IsolationStrategy {
        THREAD, SEMAPHORE, DEFAULT
    }
}
